<!--默认网站首页-->
<template>
	<div class="indexHome">
		<top></top>
		<div class="main manage-wrap">
			<div class="manage-wrap">
				<div class="manage-row">
					<!--信息块-->
					<!--<div class="manage-module module-tip">
						<div class="manage-title">
							治理規則
							<el-button type="success" size="mini" round @click="visibleRule=!visibleRule" >
								<span v-if="!visibleRule">查看規則<i class="el-icon-arrow-down"></i></span>
								<span v-else>隐藏↑</span>
							</el-button>
						</div>
						<div class="manage-content" v-if="visibleRule">
							&lt;!&ndash;<div class="tip c-red">參與賽事投票，賺取收益（持有XG通證即可參與投票）</div>&ndash;&gt;
							&lt;!&ndash;<div class="tip c-red">或發起賽事投票，賺取更大收益！（持有XXXX個XG通證即可發起賽事）</div>&ndash;&gt;
							<ul class="manage-tip">
								<li class="tip2">1{{xg.name}}通證 = 1票</li>
								<li>可以投贊成票，也可以投反對票</li>
								<li>投票截止前，可以重複支持投票</li>
								<li>贊成票數達到一定值，並且大於反對票，即可開通賽事</li>
								<li class="c-red">投票後的通證只是暫時質押，投票失敗或賽事開獎後可在個人中心取回</li>
							</ul>
						</div>
						<div class="c-999 center" v-if="!visibleRule"><i class="el-icon-more"></i><i class="el-icon-more"></i></div>
					</div>-->
					<!--资料块-->
					<div class="manage-module module-info">
						<div class="manage-title">
							我的賽事
							<!--<router-link to="/uc/manageCreateVote">发起賽事→</router-link>-->
						</div>
						<div class="manage-content">
							<div class="module-my">

								<div class="message">
									<span class="title">我發起的賽事投票</span>
									（{{myVoteSponsored}}）
									<router-link to="/uc/MySponsored">去管理</router-link>
								</div>
								<div class="message">
									<span class="title">我參與的賽事投票</span>
									（{{myVoteInvolved}}）
									<router-link to="/uc/MyInvolved">去管理</router-link>
								</div>
								<div class="message flex-jc-sa">
									<router-link :to="{path:'/contestHall'}">
										 <el-button type="primary" size="medium" icon=""  round><i class="el-icon-caret-left"></i>赛事大厅</el-button>
									</router-link>
									<router-link to="/uc/CreateVote">
										<el-button type="warning" size="medium" icon="" round>发起賽事<i class="el-icon-caret-right"></i></el-button>
									</router-link>
								</div>
							</div>
						</div>
					</div>
				</div>
				<!--投票块-->
				<div class="manage-module">
					<div class="manage-title">
						支持賽事（投票）
						<div class="control">
							<el-button type="success" @click="refreshList()" size="small" icon="el-icon-refresh" circle></el-button>
						</div>
					</div>
                    <!--列表数据-->
					<div class="manage-content" >
						<!--類型tab-->
						<div class="mange-tab">
							<div class="item" :class="{'active':manageListType==1}" @click="onTabChange(1)">進行中({{listCountVoting}})</div>
							<div class="item" :class="{'active':manageListType==2}" @click="onTabChange(2)">歷史</div>
						</div>
						<!--<div class="c-red mt10">列表數據同步會有延遲，以詳情顯示為準</div>-->
						<div class="manage-vote-list" v-loading="loading">
							<div class="vote-list-row" v-for="(item,index) in manageList" :key="item.id" @click="actOpenVoteDialog(item)">
								<div class="info">
									<div class="player">
										<span class="rank"><i class="fa fa-flag-checkered"></i>{{index+1}}</span>
										<span>{{item.contestMaster}}VS{{item.contestBranch}}（{{item.infoName}}）</span>
									</div>
									<div class="ticket number">
										<span>贊成票數：</span>
										<i class="fa fa-thumbs-up"></i>
										{{item.forVotes}}/{{item.quorumVotes}}
										(完成度:{{ (item.forVotes/item.quorumVotes*100).toFixed(2)}}%)
									</div>
									<div class="ticket number">
										<span>反對票數：</span>
										<i class="fa fa-thumbs-down"></i>
										{{item.againstVotes}}
									</div>
									<div>
										<span>投票狀態：</span>
										<span>{{voteStatusObject[item.statue]}}</span>
									</div>
									<div class="limit" v-if="manageListType==1">
										<span>投票剩餘：</span>
										<i class="fa fa-clock-o"></i>
										{{voteCutTimeFormat(item.endTime)}}
									</div>
									<div>
										<span>發 布 者：</span>
										<span>{{item.sponsor|token}}</span>
									</div>
								</div>
								<div class="btn-group">
									<el-button type="primary" size="small" icon="el-icon-right" circle ></el-button>
								</div>
							</div>
						</div>
					</div>
					<!--翻页-->
					<page-control
						:page="page"
						:page-size="pageSize"
						:list-count="listCount"
						@chnagepage = "chnagePage"
					></page-control>
				</div>
				<!---->
				<!---->
			</div>
		</div>
		<footter color="white" showLink></footter>

        <!--************************************************操作层**************************************************************-->
        <!--************************************************操作层**************************************************************-->
        <!--************************************************操作层**************************************************************-->
		<el-dialog
			title=""
			width="340px"
			top="calc(50vh - 250px)"
			:append-to-body="true"
			:visible.sync="dialogVisible"
			:before-close="handleClose"
		>
			<div class="dialog-detail-module" >
				<div class="module-title">我要投票</div>
				<!--內容-->
				<div class="line"></div>
				<vs :favour-count="timelyObjectVote.forVotes" :oppose-count="timelyObjectVote.againstVotes"></vs>
				<div class="module-wrap">
					<div class="v-row">
						<span class="label">賽事名稱：</span>
						{{voteObject.contestMaster}}VS{{voteObject.contestBranch}}（{{voteObject.infoName}}）
					</div>
					<div class="v-row">
						<span class="label">賽事玩法：</span>
						{{playTypesObject[voteObject.playType]}}
					</div>
					<div class="v-row">
						<span class="label">基礎賠率：</span>
						<!--{{timelyObjectContest.odds}}-->
						{{contestOddsFlat(timelyObjectContest.odds)}}
						<i class="el-icon-loading" v-show="loadingContest"></i>
					</div>
					<div class="v-row">
						<span class="label">投注開始：</span>
						<i class="fa fa-clock-o"></i>{{voteObject.startTimeStr}}
					</div>
					<div class="v-row">
						<span class="label">投注結束：</span>
						<i class="fa fa-clock-o"></i>{{voteObject.endTimeStr}}
					</div>
					<!--<div class="v-row">-->
					<!--    <span class="label">賽事開始：</span>-->
					<!--    <i class="fa fa-clock-o"></i>{{voteObject.gameStartTime}}-->
					<!--</div>-->
					<!--<div class="v-row">
						<span class="label">賽事結果：</span>
						{{ contestResultFlat( voteObject.getFootGameScore ) }}
					</div>-->
				</div>
				<!--內容-->
				<div class="line"></div>
				<div class="module-wrap">
					<div class="v-row">
						<span class="label">發起用戶：</span>{{voteObject.sponsor|token}}
					</div>
					<div class="v-row" >
						<span class="label">投票狀態：</span>
						<span >{{voteStatusObject[timelyObjectVote.status]}}</span>
						<i class="el-icon-loading" v-show="loadingVote"></i>
					</div>
					<div class="v-row">
						<span class="label">投票截止：</span>
						<i class="fa fa-clock-o"></i>{{voteCutTimeFormat(voteObject.endTime)}}
					</div>
					<div class="v-row">
						<span class="label">完成情况：</span>

						{{ (timelyObjectVote.forVotes/voteObject.quorumVotes*100).toFixed(2)}}%
						（需要赞成票{{voteObject.quorumVotes}}）
					</div>
					<!--<div class="v-row">
						<span class="label">贊成票數：</span>
						<i class="fa fa-thumbs-up"></i>
						{{timelyObjectVote.forVotes}}/{{voteObject.quorumVotes}}
						(完成度：{{ (timelyObjectVote.forVotes/voteObject.quorumVotes*100).toFixed(2)}}%)
						<i class="el-icon-loading" v-show="loadingVote"></i>
					</div>
					<div class="v-row">
						<span class="label">反對票數：</span>
						<i class="fa fa-thumbs-down"></i>
						{{timelyObjectVote.againstVotes}}
						<i class="el-icon-loading" v-show="loadingVote"></i>
					</div>-->
					<div class="v-row">
						<span class="label">我的投票：</span>
						<div class="con">
							贊成：<i class="fa fa-thumbs-up"></i>{{timelyObjectVote.forVotesMy}}
							反對：<i class="fa fa-thumbs-down"></i>{{timelyObjectVote.againstVotesMy}}
							<i class="el-icon-loading" v-show="loadingVote"></i>
						</div>
					</div>
					<div class="v-row">
						<span class="label">投票數量：</span>
						<div class="con">
							<div class="input-wrap w100">
								<el-input type="number" class="" v-model="voteInput.voteValue"  :clearable="true" size="small" placeholder="請輸入"></el-input>
							</div>
							<span>（{{xg.name}}）</span>
							<el-popover placement="top-end" title="提示" width="200" trigger="click" content="投票的票數只是暫時質押，投票失敗，或賽事開獎後可在用戶中心取回。">
								<i class="f24 el-icon-question" slot="reference"></i>
							</el-popover>
						</div>
					</div>
					<div class="v-row">
						<span class="label">通证餘額：</span>
						<div class="con">{{tornlinkToken.balance + xg.name}}</div>
					</div>

				</div>
				<div class="line"></div>
				<div class="btn-group">
					<el-button
						type="danger" size="big" round
						:loading="submiting"
						:disabled="btVoteDisable"
						@click="actSubmitMyVote(0)"
					>
						<i class="fa fa-thumbs-down"></i>反對
					</el-button>
					<el-button
						type="success" size="big" round
						:loading="submiting"
						:disabled="btVoteDisable"
						@click="actSubmitMyVote(1)"
					>
						<i class="fa fa-thumbs-up"></i>贊成
					</el-button>

				</div>
				<!--<div class="c-red">投票的票數只是暫時質押，投票失敗，或賽事開獎後可在用戶中心取回。</div>-->
			</div>
		</el-dialog>
	</div>
</template>


<script type="text/javascript">

/*加载资源*/
import { mixins } from '@/mixins/mixins'
import { mixinsUtils } from '@/mixins/mixins.utils'
import { mixinsManage } from "@/views/manage/js/manage.mixins";
import { contestMixinsGlobal} from '@/views/contestHall/contest.mixins.global'
import {
	EVENT_LOADINITDATA,
	msgInterface,
	precisionToNum,
	smartContractBroadcastCallback,
	smartContractConfirmCallback,
} from '@/libs/site.utils'
import {
	apiManageList, apiMyVoteCount,
	tronUserVoteSubmit, getEffectiveValueForContest2,
	getEffectiveValueForVote, voteDatalistWrapProcessing, validateScore,
} from "./js/manage.func";
import util from "@/libs/util";
import { approve, hex2Num, balanceOf, dev, allowance } from "@/libs/tron.lib";
import { governancePoolContract, voteGovernanceContract, DATAMAP_VOTE} from "./js/manage.lib";
import {
  tronGetVoteKeyData,
  apiVotingAnalysisServe
} from "../uc/manage/js/manage.user.lib";

/*组件*/
import top from '@/components/top.vue'
import footter from "@/components/footer.vue"
import banner from '@/components/banner.vue'
import pageTip from '@/components/pageTip.vue'
import vs from '@/components/vs'
import pageControl from "@/components/pageControl";
import { tronGetGameKeyData } from "@/views/contestHall/contest.func";

const debounce = util.debounce(1000) //初始化个防抖对象

export default {
	name:'manage',
	components: { top,footter,banner,pageTip,vs,pageControl },
	mixins:[mixins,mixinsUtils,mixinsManage,contestMixinsGlobal],
	data () {
		return {
			///////////////////////交互数据///////////////////////////
			loading           : false,//通用loading
			loadingVote       : false,//投票操作层单独使用的loading,表示投票数据的加载解析状态
			loadingContest    : false,//投票操作层单独使用的loading，表示赛事数据加载解析状态
			submiting         : false,//是否提交中
			// timestampNow : 0,//当前时间戳  mixinsManage 中有了
			timeHandler       : null,//时间处理定时器
			timehandlerTronWeb: null,//判断tronweb对象的定时器
			dialogVisible     : false,//显示操作层
			visibleRule : false,
			// voteApprove : false,//是否授权，应该是同时兼容不同币种的

			///////////////////////简单数据///////////////////////////
			page           : 1,//页码
			pageSize       : 5,//每页数量
			listCount      : 0,//当前条件记录数量，用于翻页
			listCountVoting: 0,//进行中的投票数量
			manageListType : 1,//列表数据类型，约定1为进正常行中的，2为其它的，多处用到这个数据，不可随便更改约定
			myVoteSponsored: '-',//发起的投票数量
			myVoteInvolved : '-',//参与的投票数量

			///////////////////////复杂数据////////////////////////////
			//投票数据列表
			manageList:[],
			//投票对象【静态数据】，
			voteObject :{},
            //实时数据对象【投票】，应该从区块链上实时获取,可能会有一些是静态数据中有的
            timelyObjectVote:{
	            status        : 0,//投票状态
	            forVotes      : 0,//总赞成票数
	            forVotesMy    : 0,//我的赞成票数
	            againstVotes  : 0,//总反对票数
	            againstVotesMy: 0,//我的反对票数
            },
            //实时数据对象【赛事】，应该从区块链上实时获取,可能会有一些是静态数据中有的
            timelyObjectContest: {
                status: 0,//赛事状态
	            odds:[]//培
            },
			//投票输入的数据
			voteInput: {
                voteAct:'',//投票类型，1是赞成，0是反对
                voteValue:'',//投票数量，需要验证不能为0，或负数
            }
		};
	},

	/////////////////////////////////////////////////////计算///////////////////////////////////////////////////////////
	/////////////////////////////////////////////////////计算///////////////////////////////////////////////////////////
	/////////////////////////////////////////////////////计算///////////////////////////////////////////////////////////
	computed: {
		//投票按钮是否禁用
		btVoteDisable(){
			let _diff = this.voteObject.endTime / 1000 - this.timestampNow //投票结束时间差
        	if(this.submiting==true){ //提交中就禁用
        		return true
	        }else if(this.timelyObjectVote.status !=1){//只有状态1才能投票
        		return true
	        }else if(_diff<0){ //剩余时间小于0，也禁用
        		return true
	        }else{
        		return false
	        }
		}
    },
	//////////////////////////////////////////////////////创建//////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////创建//////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////创建//////////////////////////////////////////////////////////
	created () {
		//倒计时显示处理
		this.timestampNow = parseInt((new Date().getTime()) / 1000)
		this.timeHandler = setInterval(() => {
			this.timestampNow = parseInt((new Date().getTime()) / 1000)
		}, 5000)

		//tronweb初始化后，才加载数据
		this.timehandlerTronWeb = setInterval(()=> {
			if(window.tronWeb && this.isLogin) {
				this.loadData() //加载投票列表数据
				clearInterval(this.timehandlerTronWeb)
			}
		},1000)

	},

	mounted () {
		//监听app.vue中的事件总线
		this.$root.eventHub.$on(EVENT_LOADINITDATA,() => {
			// this.loadData();
		})
	},

	//////////////////////////////////////////////////////方法//////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////方法//////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////方法//////////////////////////////////////////////////////////
	methods:{
		//加载数据
		loadData () {
			dev &&  this.$notify({ title: '定时器', message: '重新加载数据...' ,duration:2000 })
			this.getManageList() //加载投票列表数据
			this.getMyVoteCount()//获取我的投票数量
		},

		////////////////////////////////////////////////数据请求//////////////////////////////////////////////////////
		////////////////////////////////////////////////数据请求//////////////////////////////////////////////////////
		////////////////////////////////////////////////数据请求//////////////////////////////////////////////////////
		/**
		 * 请求数据列表入口
		 */
		getManageList(){
			this.loading = true
			let that = this;
			//从服务器取得投票的id数组（区块链上的投票id，不是数据库表ID）
			apiManageList({
				page:this.page,
				pageSize:this.pageSize,
				type:this.manageListType
			},(res)=>{
				if (res.resultFlag){
					this.loading = false //隐藏loading
					if(this.manageListType==1){//只有切换的是进行中的，才显示数量
						this.listCountVoting = res.count
					}
					this.listCount = res.count //当前记录数
					if(res.data.length > 0){//有数据时，才处理数据
						this.manageListDataHandle(res) //数据处理
					}else{//如果没有数据，有可能是投票全过期了，变成了历史状态 ，反正清空数据
						console.log('清空')
						this.manageList = []
					}
				}
			})
		},

		/**
		 * 列表数据处理, 弄这个方法是为了保证上下调用链中的方法尽量干净
		 * 因为要造了“处理列表的实时数据”这个恶业，才会有这个方法
		 * @param res 整个请求结果
		 */
		manageListDataHandle(res){
			dev && console.log('》》》》》》》》》》》》》》》》》》》》》》》数据分发处理方法：')
			//取得所有投票区块id
			let arrGame =  res.data.reduce((ret,cur) => {
				ret.push(cur.proposalId)
				return ret
			},[])

			//处理一下数据，主要是精度处理
			let _manageListWrap = voteDatalistWrapProcessing(res.data)

			//渲染判断
			if(this.manageListType == 1){
				//如果第一次显示，或有数据数量有改变，则用接口数据
				if(this.manageList.length == 0 || this.manageList.length != _manageListWrap.length){
					//如果首次进入页面 ，则直接先显示服务器请求到的数据，再进行包装再次渲染,以防区块链或解析抽疯
					dev && console.log('》》》》》》》》》》》》》》》》》》》》》》》数据包装方法：首次加载，this.manageList为空')

					this.manageList = _manageListWrap
					this.getManageTimelyData(arrGame,_manageListWrap);//下一步
				}else{
					//否则就不用再次赋值，用旧的数据来包装处理（针对服务器的是未及时拉取的旧数据）
					dev && console.log('》》》》》》》》》》》》》》》》》》》》》》》数据包装方法：第二次加载',this.manageList)
					this.getManageTimelyData(arrGame,this.manageList);//下一步
				}
			}else if(this.manageListType == 2){
				// 如果显示的是历史数据：不用读取区块链上的实时数据,每次都直接赋值后台的数据
				dev && console.log('》》》》》》》》》》》》》》》》》》》》》》》数据包装方法：历史数据直接用服务器的来显示')
				this.manageList = _manageListWrap
			}
		},


		/**
		 * 从区块链上读取即时性数据，再解析，合并到本地数据
		 * @param voteIds 投票的区块id
		 * @param manageList 要进行数据包装的列表数据（数据来源见调用的父方法）
		 */
		getManageTimelyData (voteIds,manageList) {
			dev && console.log('》》》》》》》》》》》》》》》》》》》》》》》数据包装方法：')
			let that = this;
			//经测试，没有登录从区块链上读取的投票数据，也可以解析，但是要有一个默认触发钱包地址 TWoFrT5pANst5cTkcbHCVCNfHe7wX116d3
			let sender = this.isLogin ? this.sender : 'TWoFrT5pANst5cTkcbHCVCNfHe7wX116d3'

			//从合约中请求数据
			tronGetVoteKeyData(voteIds,'TWoFrT5pANst5cTkcbHCVCNfHe7wX116d3').then((rs) => {
				// let {param} = rs
				let _analyzing = getEffectiveValueForVote(rs,Object.keys(DATAMAP_VOTE).length)
				dev && console.log('》》》》》》》》》》》》》》》》》》》》》》》数据包装方法：解析结果数据:',_analyzing)
				let _wrapResult = [...manageList].map((item,index)=> {//由于旧数据可能是经过vue包装的，统一生成个新的数组
					item.status         = _analyzing[index][DATAMAP_VOTE.STATUS.index] // 状态
					item.forVotes       = precisionToNum(_analyzing[index][DATAMAP_VOTE.FAVOUR_COUNT.index]) // 当前总赞成票数
					item.againstVotes   = precisionToNum(_analyzing[index][DATAMAP_VOTE.OPPOSE_COUNT.index]) //当前总反对票
					item.forVotesMy     = precisionToNum(_analyzing[index][DATAMAP_VOTE.FAVOUR_COUNT_MY.index]) //我的赞成票
					item.againstVotesMy = precisionToNum(_analyzing[index][DATAMAP_VOTE.OPPOSE_COUNT_MY.index]) //我的反对票
					return item
				})
				this.manageList = [..._wrapResult]
			})

		},

		//获取我的投票数
		getMyVoteCount(){
			apiMyVoteCount({sender:this.sender},(res)=>{
				if (res.resultFlag) {
					this.myVoteSponsored = res.data.sponsored
					this.myVoteInvolved = res.datainvolved
				}
			})
		},


		//////////////////////////////////////////////////投票操作////////////////////////////////////////////////////
		//////////////////////////////////////////////////投票操作////////////////////////////////////////////////////
		//////////////////////////////////////////////////投票操作////////////////////////////////////////////////////
		//打开投票层
		actOpenVoteDialog(item){
			//限制登录
			if(!this.isLogin){
				this.$notify.error('没有登录钱包')
				return false
			}
			this.voteObject     = { ...item }//赋值操作对象数据
			this.loadingVote    = true //加载中（投票数据）
			this.loadingContest = true //加载中（赛事数据）
			this.dialogVisible  = true //显示操作层

			//处理投票及时数据从，item中快速取值（列表有定时刷新的情况下使用）
			//注意，前面要放一个;分号，以防上一行没有被视为结束语句
			// ;['status','forVotes','againstVotes','forVotesMy','againstVotesMy'].forEach((key)=> {
			// 	this.timelyObjectVote[key] = item[key]
			// })

			//从合约中请求数据
			tronGetVoteKeyData([item.proposalId],this.sender).then((rs) => {
				// let {param} = rs
				let _analyzing = getEffectiveValueForVote(rs,Object.keys(DATAMAP_VOTE).length)
				dev && console.log('/////////////////////////////////////////////请求单个投票实时数据解析结果数据:',_analyzing)
				this.timelyObjectVote.status         = _analyzing[0][DATAMAP_VOTE.STATUS.index] // 状态
				this.timelyObjectVote.forVotes       = precisionToNum(_analyzing[0][DATAMAP_VOTE.FAVOUR_COUNT.index]) // 当前总赞成票数
				this.timelyObjectVote.againstVotes   = precisionToNum(_analyzing[0][DATAMAP_VOTE.OPPOSE_COUNT.index]) //当前总反对票
				this.timelyObjectVote.forVotesMy     = precisionToNum(_analyzing[0][DATAMAP_VOTE.FAVOUR_COUNT_MY.index]) //我的赞成票
				this.timelyObjectVote.againstVotesMy = precisionToNum(_analyzing[0][DATAMAP_VOTE.OPPOSE_COUNT_MY.index]) //我的反对票
				this.loadingVote = false //已完成加载
			})

			//从赛事合约请求实时数据并解析
			tronGetGameKeyData(item.externalLinkId).then((rs) => {
				// let {param} = rs
				let _analyzing2 = getEffectiveValueForContest2(rs)
				dev && console.log('/////////////////////////////////////////////请求单个赛事实时数据解析结果数据:',_analyzing2)
				this.timelyObjectContest.status = _analyzing2[1] //取得状态
				this.timelyObjectContest.odds = _analyzing2[2] //取得P率
				this.loadingContest = false
			})
		},

		//提交投票
		actSubmitMyVote (act) {
			let that = this
			let sender = this.sender;
            this.voteInput.voteAct = act //赋值投票动作
			//验证投票数量
            if(!validateScore(this.voteInput.voteValue,['zero','less'],'投票数量')){
                return false
            }
			this.submiting = true //标记为提交中，防止重复点击
			//组织提示内容
			const ACTION = that.LangSet(['投票:', 'Vote:'])
			//todo 这里要改
			const ACTION_TITLE = `${this.voteObject.contestMaster}vs${this.voteObject.contestBranch}(${this.voteObject.infoName})`
			//查看用户是否授权approve操作代币
			this.inquiryApprove(sender).then(function (rs) {
				//查看用户代币余额
				that.getUserBalance(sender).then(function (rs) {
					let userBalance = rs.userBalance;
					//区块链方法。需要投票id，暂时or反对，票数
					let voteObjectL = that.voteObject;
					let amountl = that.voteInput.voteValue;
					let support = that.voteInput.voteAct == '1' ? true : false;
					if (userBalance <= amountl) {
						that.$message.error('您的资金不足!');
						return;
					}
					//投9票则是9*100000000
					amountl = amountl * Math.pow(10, that.xg.decimal)
					msgInterface('投票操作', 0, 1);//等待钱包确认
					tronUserVoteSubmit( voteObjectL.proposalId, that.sender, amountl, support,
                        smartContractBroadcastCallback(ACTION,ACTION_TITLE,(status,txid)=> {
                            that.submiting = false //恢复可提交
                            that.opWindowCloseCallBack () //关闭窗口处理
                            if (status == 1) {
                                apiVotingAnalysisServe({}, txid)
                            }
                        }),
                        smartContractConfirmCallback(ACTION,ACTION_TITLE) //统一回调
					)
				})
			})
		},

		//获取用户余额
		getUserBalance(sender) {
			let that = this;
			return new Promise(function (resolve, reject) {
				balanceOf(that.xg.address, sender, (rsp) => {
					let userBalance = hex2Num(rsp, that.xg.decimal);
					that.$message.success('您的代幣餘額:' + userBalance);
					resolve({'code': 1, 'userBalance': userBalance});
				})
			})

		},

		//查询或授权
		inquiryApprove(sender) {
			let that = this;
			return new Promise(function (resolve, reject) {
				//用户通过投票治理合约，创建投票前。是需要转账代幣给票仓合约中存着。需要用户授权票仓操作代幣
				allowance(that.xg.address, governancePoolContract, sender, (res) => {
					let owance = hex2Num(res, 8);
					if (owance <= 0) { //如果没有授权，就执行授权
						approve(
							governancePoolContract,
							that.xg.address,
							sender,
							smartContractBroadcastCallback("授權", that.xg.name, (status, txid) => {
								console.log('hash:', txid)
								//区块提交成功处理（注意，只是提交成功，不代表区块链上面处理成功）
								if (status == 1) {
									resolve({'code': 1});
								}
							})
						);
					}else if (owance > 0) {
						console.log('有授权金额:', owance, '继续下一步');
						resolve({'code': 1});
					}
				});
			})
		},

		//////////////////////////////////////////////////其它操作////////////////////////////////////////////////////
		//////////////////////////////////////////////////其它操作////////////////////////////////////////////////////
		//////////////////////////////////////////////////其它操作////////////////////////////////////////////////////
		//刷新
		refreshList(){
			this.loading = true
			debounce(()=> {
				this.getManageList()
			})
		},

		//關閉操作窗口
		handleClose (done) {
			done() //dialog插件需要的回调
            setTimeout(() => {
                this.opWindowCloseCallBack(); //進行相關處理
            },200)
        },

		//關閉操作窗口時，要處理的東西
		opWindowCloseCallBack () {
			this.dialogVisible = false //触发关闭窗口，主要是针对投票提交后
			this.voteObject = {} // 清除投票操作对象
			this.voteInput.voteValue = '';//输入的投票数

			//清空那2个及时数据对象，但要注意它们的初始化属性值
			Object.keys(this.timelyObjectVote).forEach((key)=> {
				this.timelyObjectVote[key] = 0 //刚好所有默认都是0，所以可以这样干
			})
			this.timelyObjectContest.odds = [] //重置培
		},

        //切换列表数据tab
        onTabChange(active){
		    if(this.manageListType !== active){
			    this.loading = true //显示loading
		    	this.manageList = [] //这里要清空旧的数据，因为上面的数据数据中有一条件是使用旧数据来包装的
		        this.manageListType = active
                // this.getManageList() //重新获取数据
			    debounce(()=> {
				    this.getManageList()
			    })
            }
        },

		//切换页码
		chnagePage(v){
			this.page = Number(v) //传过来的是字符串，转成数字
			this.manageList = [] //这里要清空旧的数据，因为上面的数据数据中有一条件是使用旧数据来包装的
			// this.getManageList()//重新刷新数据
			debounce(()=> {
				this.getManageList()
			})
		}
	},

	///////////////////////////////////////////////其它事件////////////////////////////////////////////////////////
	///////////////////////////////////////////////其它事件////////////////////////////////////////////////////////
	///////////////////////////////////////////////其它事件////////////////////////////////////////////////////////
	watch:{

	},
	beforeDestroy () {
		this.$root.eventHub.$off('loadInitData')//取消事件总线监听
		clearInterval(this.timeHandler)
		clearInterval(this.timehandlerTronWeb)
	},
};

////////////////////////////////////////////////外部脚本/////////////////////////////////////////

</script>


<style lang="less" scoped>
/*公共变量*/
@import '~@res/global.less';
@import './manage.less';

</style>
